// 循环体的单次循环叫作 一次迭代（iteration）

// 【while循环】
let i = 3
while (i) {
	console.log(i) // 3 2 1
	i--
}

// 单行循环不需要大括号
let j = 3
// -- 运算符第一步，先返回 j 的值，然后再将 j 自身减 1。
while (j--) console.log(j) // 2 1 0

// ********************************************************************************************

// 【do...while循环】（首先先执行一次循环体，然后再进行循环条件判断）
let k = 0
do {
	console.log(k) // 0 1 2
	k++
} while (k < 3)

// ********************************************************************************************

// 【for循环】

// 循环执行过程:
for (let i = 0; i < 3; i++) console.log(i) // 0 1 2

// ******************
// 开始
// let i = 0（初始化变量，执行一次）

// 如果条件为真，执行一次循环体
// if (i < 3) { console.log(i); i++ }（0, i = 1）

// 如果条件为真，执行一次循环体
// if (i < 3) { console.log(i); i++ }（1, i = 2）

// 如果条件为真，执行一次循环体
// if (i < 3) { console.log(i); i++ }（2, i = 3）

// i == 3条件不为真，退出循环
// ******************

// 【省略语句段】
// for (;;) console.log('无限循环');

// 【break 退出循环】
// while, do...while, for 都支持 break 语句，用于退出循环。

// 【continue 跳过当前迭代】
// while, do...while, for 都支持 continue 语句，用于跳过当前迭代（循环体中 continue 生效时，后续语句不会执行，而是直接进入下一次迭代）。

// 【标签（label）】可以从多层嵌套的循环结构中跳出到外层循环。
outer: for (let i = 0; i < 3; i++) {
	for (let j = 0; j < 3; j++) {
		console.log(`i: ${i} - j: ${j}`)
		if (i === 1 && j === 1) break outer // 跳出两层循环（终止外层 outer 循环）
	}
}
